/**
 * 项目名：pactera-boot
 * 包名：com.pactera.controller.common.api
 * 文件名：SysRoleApi.java
 * 版本信息：1.0.0
 * 日期：2019年1月7日-上午10:04:44
 * Copyright (c) 2019 Pactera 版权所有
 */
package com.pactera.service.system;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.pactera.common.constants.Constants;
import com.pactera.common.database.TargetDataSource;
import com.pactera.common.utils.UUIDUtils;
import com.pactera.mapper.SysRoleMapper;
import com.pactera.model.SysRole;
import com.pactera.vo.common.PageRespVo;
import com.pactera.vo.role.RoleReqAddVo;
import com.pactera.vo.role.RoleReqBrowseVo;
import com.pactera.vo.role.RoleRespPageVo;
import com.pactera.vo.role.RoleRespVo;
import com.pactera.vo.role.RoleReqUpdVo;

/**
 * @ClassName：SysUserRoleService
 * @Description：系统角色业务层 
 * @author LiuGuiChao 
 * @date 2019年1月4日 上午10:27:53 
 * @version 1.0.0 
 */
@Service
public class SysUserRoleService {
	
	@Autowired
	private SysRoleMapper sysRoleMapper;
	
	private static final Logger LOGGER = LoggerFactory.getLogger(SysUserRoleService.class);
	
	/**
	 * @Title: querySysRoleByPage 
	 * @Description: 通过分页查询角色信息
	 * @param pageNum 当前页码
	 * @param pageSize 每页大小
	 * @return Page
	 * @author LiuGuiChao
	 * @date 2019年1月7日 下午1:38:32 
	*/
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public PageRespVo<RoleRespVo> querySysRoleByPage(Integer pageNum, Integer pageSize, RoleReqBrowseVo roleReqVo) {
		LOGGER.info("####### SR-用户权限列表展示 Begin #######");
		Page<RoleRespVo> pageItems = new Page<RoleRespVo>();
		PageRespVo<RoleRespVo> pageInfo = new PageRespVo<>();
		try {
			 //设置分页信息，分别是当前页数和每页显示的总记录数
			PageHelper.startPage(pageNum, pageSize);
			
			pageItems = sysRoleMapper.selectAllByPage(roleReqVo);
			
			pageInfo = new PageRespVo(pageItems);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		LOGGER.info("####### SR-用户权限列表展示 End #######");
		return pageInfo;
	}
	
	/**
	 * @Title: saveSysRole 
	 * @Description: 新增角色信息操作
	 * @author LiuGuiChao
	 * @date 2019年1月4日 上午10:29:25 
	*/
	@Transactional(rollbackFor=Exception.class)
	@TargetDataSource("ds1")
	public boolean saveSysRole(RoleReqAddVo roleAddReqVo) {
		LOGGER.info("####### SR-系统权限新增 Begin #######");
		int cnt = 0 ;
		try {
			SysRole sysRole = new SysRole();
			sysRole.setId(UUIDUtils.create());
			sysRole.setName(roleAddReqVo.getName());
			sysRole.setCode(roleAddReqVo.getCode());
			sysRole.setRemark(roleAddReqVo.getRemark());
			sysRole.setIsValid(Constants.VALID);
			sysRole.setCreateUname("test");
			sysRole.setCreateUid("123456");
			sysRole.setCreateTime(new Date());
			cnt = sysRoleMapper.insert(sysRole);
		} catch (Exception e) {
			e.printStackTrace();
		}
		LOGGER.info("####### SR-系统权限新增 End 影响行数- "+ cnt +"#######");
		return cnt > 0 ? true:false;
	}
	
	/**
	 * @Title: deleteSysRole 
	 * @Description: 删除角色信息
	 * @param roleId void
	 * @author LiuGuiChao
	 * @date 2019年1月4日 上午11:28:09 
	*/
	@Transactional(readOnly=true,rollbackFor=Exception.class)
	public boolean deleteSysRole(String roleId) {
		LOGGER.info("####### SR-用户权限删除 Begin #######");
		int cnt = 0 ;
		try {
			cnt = sysRoleMapper.deleteByPrimaryKey(roleId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		LOGGER.info("####### SR-用户权限删除 End "+ cnt +"#######");
		return cnt > 0 ? true:false;
	}
	
	/**
	 * @TODO 添加批量删除操作
	 * */
	
	/**
	 * @Title: updateSysRole 
	 * @Description: 更新系统角色信息
	 * @author LiuGuiChao
	 * @date 2019年1月4日 下午1:46:36 
	*/
	@Transactional(readOnly=true,rollbackFor=Exception.class)
	public boolean updateSysRole(RoleReqUpdVo roleUpdReqVo) {
		LOGGER.info("####### SR-用户权限更新 Begin #######");
		int cnt = 0 ;
		try {
			SysRole sysRole = sysRoleMapper.selectByPrimaryKey(roleUpdReqVo.getId());
			sysRole.setName(roleUpdReqVo.getName());
			sysRole.setCode(roleUpdReqVo.getCode());
			sysRole.setRemark(roleUpdReqVo.getRemark());
			sysRole.setUpdateTime(new Date());
			sysRole.setUpdateUname("test更新");
			sysRole.setUpdateUid("123456");
			cnt = sysRoleMapper.updateByPrimaryKey(sysRole);
		} catch (Exception e) {
			e.printStackTrace();
		}
		LOGGER.info("####### SR-用户权限更新 End"+ cnt +"#######");
		return cnt > 0 ? true:false;
	}
	
	/**
	 * @Title: queryByUserId 
	 * @Description: 通过用户ID获取角色信息
	 * @param userId
	 * @return List<RoleRespVo>
	 * @author LiuGuiChao
	 * @date 2019年1月10日 上午10:38:26 
	*/
	@TargetDataSource("ds1")
	public List<RoleRespVo> queryByUserId(String userId) {
		LOGGER.info("####### SR-根据用户ID获取用户角色 Begin #######");
		List<RoleRespVo> userRoleGroup = new ArrayList<RoleRespVo>();
		try {
			userRoleGroup = sysRoleMapper.selectByUserId(userId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		LOGGER.info("####### SR-根据用户ID获取用户角色 End #######");
		if(userRoleGroup != null && userRoleGroup.size() > 0) {
			LOGGER.info("####### SR-用户角色信息：" + JSONArray.parseArray(JSON.toJSONString(userRoleGroup)));
		}
		return userRoleGroup;
	}
}
